package com.twb.auth.mapper;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.twb.core.base.mapper.TwbBaseMapper;
import com.twb.auth.entity.twbRole.TwbRole;
import com.twb.auth.entity.twbRole.TwbRoleDataScope;
import com.twb.auth.entity.twbRole.TwbRoleResource;
import com.twb.auth.entity.twbRole.TwbRoleResourceAccredit;
import com.twb.auth.entity.twbRole.dto.GetTwbRoleByIdDto;
import com.twb.auth.entity.twbRole.dto.SearchTwbRoleDto;
import com.twb.auth.entity.twbRole.vo.SearchTwbRoleVo;

/**
 * @ClassName TwbRoleMapper
 * @Description 角色管理mapper
 * @author DSY
 * @date 2018年11月3日 下午5:24:38
 */
@Mapper
public interface TwbRoleMapper extends TwbBaseMapper<TwbRole> {

	/**
	 * @Title  listRoleByUserId
	 * @Description 根据用户ID获取用户角色信息
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月6日 下午4:26:39
	 */
	Set<TwbRole> listRoleByUserId(String userId);

	/**
	 * @Title  searchTwbRole
	 * @Description 角色列表查询
	 * @param vo
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午10:16:59
	 */
	List<SearchTwbRoleDto> searchTwbRole(SearchTwbRoleVo vo);

	/**
	 * @Title  getMaxSeqByOrgId
	 * @Description 获取相同等级角色的最大顺序号
	 * @param orgId
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 上午11:02:40
	 */
	Integer getMaxSeqByOrgId(String orgId);

	/**
	 * @Title  getTwbRoleById
	 * @Description 根据ID获取角色详情
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:12:20
	 */
	GetTwbRoleByIdDto getTwbRoleById(String id);

	/**
	 * @Title  getUserCountByRoleId
	 * @Description 获取角色下的用户数量
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:28:58
	 */
	int getUserCountByRoleId(String id);

	/**
	 * @Title  deleteResourceByRoleId
	 * @Description 删除角色资源信息
	 * @param id
	 * @return
	 * @author DSY
	 * @date 2018年11月15日 下午12:31:45
	 */
	int deleteResourceByRoleId(String id);

	/**
	 * @Title  deleteAccreditResourceByRoleId
	 * @Description 删除该角色的授权资源信息
	 * @param id
	 * @author DSY
	 * @date 2018年11月15日 下午4:24:27
	 */
	int deleteAccreditResourceByRoleId(String id);

	/**
	 * @Title  saveRoleResource
	 * @Description 保存角色经办权限信息
	 * @param roleResource
	 * @return
	 * @author DSY
	 * @date 2018年11月22日 下午5:15:12
	 */
	int saveRoleResource(TwbRoleResource roleResource);

	/**
	 * @Title  deleteRoleResourceByRoleId
	 * @Description 删除角色经办权限
	 * @param roleId
	 * @param projectId
	 * @author DSY
	 * @date 2018年11月22日 下午5:21:02
	 */
	int deleteRoleResourceByRoleId(@Param("roleId") String roleId, @Param("projectId") String projectId);

	/**
	 * @Title  deleteRoleAccreditResourceByRoleId
	 * @Description 删除角色授权权限
	 * @param roleId
	 * @param projectId
	 * @author DSY
	 * @date 2018年11月22日 下午5:29:30
	 */
	int deleteRoleAccreditResourceByRoleId(@Param("roleId") String roleId, @Param("projectId") String projectId);

	/**
	 * @Title  saveRoleAccreditResource
	 * @Description 保存角色授权权限
	 * @param roleResource
	 * @return
	 * @author DSY
	 * @date 2018年11月22日 下午5:29:50
	 */
	int saveRoleAccreditResource(TwbRoleResourceAccredit roleResource);

	/**
	 * @Title  listRoleIdsByUserId
	 * @Class: TwbRoleMapper.java
	 * @Description 获取用户角色ID
	 * @param userId
	 * @return
	 * @author DSY
	 * @date 2018年11月25日 下午9:20:45
	 */
	List<String> listRoleIdsByUserId(String userId);

	/**
	 * @Title searchRoleUserCount
	 * @Description 查询角色、用户是否已绑定
	 * @param userId
	 * @param roleId
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午4:56:22
	 */
	Integer searchRoleUserCount(@Param("userId") String userId, @Param("roleId") String roleId);

	/**
	 * @Title deleteRoleUser
	 * @Description 删除角色配置的用户
	 * @param userId
	 * @param roleId
	 * @return
	 * @author DSY
	 * @date 2020年7月15日 下午5:07:36
	 */
	Integer deleteRoleUser(@Param("userId") String userId, @Param("roleId") String roleId);
	
	/**
	 * @Title insertRoleResBatchForMysql
	 * @Description 批量插入角色经办权限（mysql）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleResBatchForMysql(List<TwbRoleResource> list);
	
	/**
	 * @Title insertRoleResBatchForOracle
	 * @Description 批量插入角色经办权限（oracle）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleResBatchForOracle(List<TwbRoleResource> list);
	/**
	 * @Title insertRoleResAccreditBatchForMysql
	 * @Description 批量插入角色可授权权限（mysql）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleResAccreditBatchForMysql(List<TwbRoleResourceAccredit> list);
	
	/**
	 * @Title insertRoleResAccreditBatchForOracle
	 * @Description 批量插入角色可授权权限（oracle）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleResAccreditBatchForOracle(List<TwbRoleResourceAccredit> list);

	/**
	 * @Title insertRoleDataScopeBatchForMysql
	 * @Description 批量插入角色自定义数据权限（mysql）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleDataScopeBatchForMysql(List<TwbRoleDataScope> list);
	
	/**
	 * @Title insertRoleDataScopeBatchForOracle
	 * @Description 批量插入角色自定义数据权限（oracle）
	 * @param list
	 * @return
	 * @author DSY
	 * @date 2021年3月7日 下午5:06:19
	 */
	Integer insertRoleDataScopeBatchForOracle(List<TwbRoleDataScope> list);
	
	/**
	 * @Title deleteRoleDataScope
	 * @Description 删除角色数据权限
	 * @param roleId
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年7月25日 下午8:18:41
	 */
	int deleteRoleDataScope(String roleId);

	/**
	 * @Title listRoleDataScopes
	 * @Description 查询角色数据权限
	 * @param id
	 * @return
	 * @AuthorOriginally DSY
	 * @date 2022年8月4日 下午6:26:34
	 */
	List<String> listRoleDataScopes(String id);
}
